home *** CD-ROM | disk | FTP | other *** search
- /*
- BDS Welcome Page RSS Feed Processing
-
- Copyright (c) 2004 Borland Software Corporation
-
- Rewritten by Daniel Wischnewski.
- Co-Admin of www.delphipraxis.net -- The German Delphi Community
- Email: dwischnewski@gatenetwork.com
- */
-
- var clientIsOnline;
- var clientUsesProxy;
- var clientProxyString;
- var clientAppDataFolder;
-
- var FEED_OK = 00;
- var FEED_OFFLINE = 01;
- var FEED_CACHE = 02;
- var FEED_CONN_ERROR = 10;
- var FEED_NODATA = 11;
- var FEED_XML4_ERROR = 12;
- var FEED_OFFLINE_NODATA = 13;
-
- var radBlog;
- radBlog = "";
-
- function appendItemNode(item, tag, aclass)
- {
- var node;
-
- node = document.createElement(tag);
- if (aclass != "")
- {
- node.className = aclass;
- }
- item.appendChild(node);
- return node;
- }
-
- function createRSSItem(channel, item, counter)
- {
- var strDesc;
- var title;
- var link;
- var node;
- var strDate;
-
- if (item == null | channel == null)
- {
- return;
- }
- title = getItemValue(item, "title");
- if (title == "")
- {
- return;
- }
- // insert list item
- link = getItemValue(item, "link");
- itemli = document.createElement("li");
- if (counter % 2 == 0)
- {
- itemli.className = "item0";
- } else {
- itemli.className = "item1";
- }
- channel.appendChild(itemli);
- // create <div> area and insert text data
- node = itemli.appendChild(document.createElement("div"));
- node.className = "title";
- node = appendItemNode(node, "A", "title");
- node.innerHTML = title;
- node.href = link;
- strDesc = getItemValue(item, "description");
- if (strDesc != "")
- {
- if (strDesc.length > 500)
- {
- strDesc = strDesc.substr(0, 500) + " [<a href='" + link + "'>...</a>]";
- }
- node = appendItemNode(itemli, "div", "description");
- try
- {
- node.innerHTML = strDesc;
- } catch(e) {
- re = /<[/]?[pP]([^>]*)?>/g;
- strDesc = strDesc.replace(re, "<br>");
- re = /<[^b][^r][^>]*?>/g;
- strDesc = strDesc.replace(re, "");
- node.innerHTML = strDesc;
- }
- }
- strDate = getDateItemValue(item, "pubDate");
- if (strDate != "")
- {
- node = appendItemNode(itemli, "div", "pubDate");
- node.innerText = getLangText("postedon") + " " + strDate;
- }
- if(getItemValue(item, "comments") != "")
- {
- node = appendItemNode(node, "A", "comments");
- node.innerText = " Comments";
- node.href = getItemValue(item, "comments");
- }
- }
-
- function doDownloadNews(feedNode, cacheXml, timeOut, xmlPersonal, date)
- {
- var wpTools;
- var xmlHTTP;
- var lResolve;
- var lConnect;
- var lSend;
- var lReceive;
- var xmlDoc;
-
- // try
- // {
- // wpTools = new ActiveXObject("BDNWelcomePage.ClientTools");
- // clientIsOnline = wpTools.IsOnline;
- // clientUsesProxy = wpTools.UsesProxy;
- // clientProxyString = wpTools.ProxyString;
- // } catch (e) {
- // clientIsOnline = true;
- // clientUsesProxy = false;
- // clientProxyString = '';
- // }
- clientIsOnline = external.Application.IsOnline;
- clientUsesProxy = external.Application.UsesProxy;
- clientProxyString = external.Application.ProxyString;
- clientUserAgentString = external.Application.UserAgent;
- // no download in offline mode
- if (!clientIsOnline)
- return FEED_OFFLINE;
- // get server xml http object
- try
- {
- xmlHTTP = getXmlHttpDoc();
- }
- catch(e)
- {
- return FEED_XML4_ERROR;
- }
- // download news feed
- if (getItemValue(cacheXml, "@link").indexOf("://") >= 0)
- {
- isLocal = false;
- try
- {
- if(feedNode.getAttributeNode("localcontent") == null)
- {
- lResolve = timeOut * 1000; // Timeout values are in milli-seconds
- lConnect = 30 * 1000;
- lSend = 30 * 1000;
- lReceive = 30 * 1000;
- xmlHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive);
- xmlHTTP.open("GET", getItemValue(cacheXml, "@link"), false);
- xmlHTTP.setRequestHeader("User-Agent", clientUserAgentString);
- xmlHTTP.send();
- if (xmlHTTP.status != 200)
- return false;
- xmlDoc = getXmlDoc();
- xmlDoc.load(xmlHTTP.responseXML);
- }
- else
- {
- xmlDoc = getXmlDoc();
- xmlDoc.load(appPath + "..\\welcomepage\\" + getItemValue(cacheXml, "@link"));
- }
- }
- catch(e)
- {
- return FEED_CONN_ERROR;
- }
- } else {
- isLocal = true;
- xmlDoc = getXmlDoc();
- xmlDoc.load(appPath + '..\\Welcomepage\\' + getItemValue(cacheXml, "@link"));
- }
- // quick'n dirty remove off all subnodes
- cacheXml.text = "";
- if (!isLocal)
- setAttrValue(cacheXml, "lastLoad", date.toLocaleDateString());
- items = xmlDoc.getElementsByTagName("item");
- for (var i = 0; i < items.length; i++)
- {
- cacheXml.appendChild(items[i]);
- }
- savePersonalSettings(xmlPersonal);
- return FEED_OK;
- }
- /*
- processRSS - Downloads RSS feed and builds HTML content from the contents
- The format of the content is as follows:
-
- <div class="channel">
- <ul>
- <li class="item0"><div class="title"><a class="title" href="(url)">title</a>
- <div class="description">description</div>
- <div class="pubDate">pubDate <a class="comments" href="comments_link">Comments</a></div>
- ...
- </ul>
- </div>
- */
- function processRSS(feedNode, rssContent, timeOut, xmlPersonal)
- {
- var downloadNews;
- var downloadResult;
- var cacheXml;
- var URI;
- var date;
- var channel;
- var channelList;
- var items;
- var maxItems;
-
- downloadNews = false;
- date = new Date();
-
- // check cached feed data
- if (getItemValue(feedNode, "reload") == "1")
- {
- downloadNews = true;
- getSubNode(feedNode, "reload").text = "0";
- savePersonalSettings(xmlPersonal);
- }
- URI = getItemValue(feedNode, "link");
- cacheXml = getSubNodeEx(getSettingsNode(xmlPersonal), "lastFeed", "link", URI);
- if (getItemValue(cacheXml, "@lastLoad") != date.toLocaleDateString())
- downloadNews = true;
- if (downloadNews)
- {
- downloadResult = doDownloadNews(feedNode, cacheXml, timeOut, xmlPersonal, date);
- } else {
- downloadResult = FEED_CACHE;
- }
-
- // get feed content
- items = cacheXml.selectNodes(".//item");
- maxItems = items.length;
- if (maxItems == 0)
- {
- if (downloadResult == FEED_OK)
- return FEED_NODATA;
- if (downloadResult == FEED_OFFLINE)
- return FEED_OFFLINE_NODATA;
- return downloadResult;
- }
- // limit to 10 entries displayed on welcome page
- if (maxItems > 10)
- {
- maxItems = 10;
- }
-
- // get news feed view layer
- channel = document.createElement("div");
- channel.className = "channel";
- channelList = document.createElement("ul");
- rssContent.appendChild(channel);
- channel.appendChild(channelList);
-
- // display news feed
- for (var i = 0; i < maxItems; i++)
- {
- createRSSItem(channelList, items[i], i);
- }
- return downloadResult;
- }
-
- function determineDefaultFeed(xmlPersonal)
- {
- var item;
- var xmlDefault;
-
- // check personal settings
- item = getSubNode(getSettingsNode(xmlPersonal), "defaultFeed");
- if (getItemValue(item, "link") == "")
- {
- xmlDefault = loadDefaultProviders();
- item = xmlDefault.selectSingleNode(".//item[@default]");
- if (item == null)
- {
- item = xmlDefault.selectSingleNode(".//item");
- }
- }
- return item;
- }
-
- function loadItemsIntoSelectBox(selectBox, items, defaultLink, header)
- {
- var optionGroup;
- var newOption;
- var item;
- var strLink;
- if (items.length > 0)
- {
- optionGroup = appendItemNode(selectBox, "optgroup", "");
- optionGroup.label = header;
- optionGroup.className = "selectoptiongroup";
- for (var i = 0; i < items.length; i++)
- {
- item = items[i];
- strLink = getItemValue(item, "link");
- newOption = appendItemNode(optionGroup, "option", "");
- newOption.text = getItemValue(item, "title");
- newOption.value = strLink;
- newOption.className = "selectoption";
- newOption.selected = (strLink == defaultLink);
- }
- }
- }
-
- function fillSelectBox(selectBox, defaultLink)
- {
- var xmlDoc;
- var groups;
- var group;
-
- if (radBlog != "")
- {
- optionGroup = appendItemNode(selectBox, "optgroup", "");
- optionGroup.label = "Borland Internal Blogs";
- optionGroup.className = "selectoptiongroup";
- newOption = appendItemNode(optionGroup, "option", "");
- newOption.text = "RADBlog";
- newOption.value = radBlog;
- newOption.className = "selectoption";
- newOption.selected = (radBlog == defaultLink);
- }
-
- xmlDoc = loadDefaultProviders();
- groups = xmlDoc.selectNodes(".//group");
-
- for (var i = 0; i < groups.length; i++)
- {
- group = groups[i];
- loadItemsIntoSelectBox(selectBox, group.selectNodes("item"), defaultLink, getItemValue(group, "title"));
- }
- }
-
- function checkRadBlog()
- {
- var xmlHTTP;
-
- try
- {
- // try
- // {
- // wpTools = new ActiveXObject("BDNWelcomePage.ClientTools");
- // clientIsOnline = wpTools.IsOnline;
- // } catch (e) {
- // clientIsOnline = true;
- // }
- if ((radBlog != "") && external.Application.IsOnline)
- {
- xmlHTTP = getXmlHttpDoc();
- xmlHTTP.setTimeouts(1000, 2000, 2000, 2000);
- try
- {
- xmlHTTP.open("GET", radBlog, false);
- xmlHTTP.send();
- if (xmlHTTP.status == 200)
- return 0;
- } catch (e) {
- }
- }
- } catch(e) {
- }
- radBlog = "";
- }
-
- function clearDynamicContent(rssContent, rssOffline, selectBox)
- {
- // clear rss content area
- for (var i = 0; rssContent.childNodes.length > 0; )
- {
- rssContent.childNodes[0].removeNode(true);
- }
- rssOffline.innerHTML = "";
- // clear rss select box
- for (var i = 0; selectBox.childNodes.length > 0; )
- {
- selectBox.childNodes[0].removeNode(true);
- }
- }
-
- function loadRSSFeed(rssContent, rssOffline, selectBox)
- {
- var xmlPersonal;
- var feedNode;
- var lastFeed;
- var bdsAppPath;
- var newOption;
-
- clearDynamicContent(rssContent, rssOffline, selectBox);
-
- // display "please wait" in rss select box
- // (this is the only place that IE will refresh on most systems)
- newOption = new Option(getLangText("pleasewait"), '', '');
- newOption.className = "selectoption";
- selectBox.options[0] = newOption;
-
- checkRadBlog();
- xmlPersonal = loadPersonalSettings();
- feedNode = determineDefaultFeed(xmlPersonal);
- fillSelectBox(selectBox, getItemValue(feedNode, "link"));
-
- switch (processRSS(feedNode, rssContent, 10, xmlPersonal))
- {
- case FEED_OFFLINE:
- rssOffline.innerHTML = getLangText("offline");
- break;
- case FEED_CACHE:
- rssOffline.innerHTML = getLangText("cached");
- break;
- case FEED_CONN_ERROR:
- rssContent.insertAdjacentHTML("beforeEnd", getLangText("conn_error"));
- break;
- case FEED_NODATA:
- rssContent.insertAdjacentHTML("beforeEnd", getLangText("norssdata"));
- break;
- case FEED_XML4_ERROR:
- rssContent.insertAdjacentHTML("beforeEnd", getLangText("xml4error"));
- break;
- case FEED_OFFLINE_NODATA:
- rssContent.insertAdjacentHTML("beforeEnd", getLangText("nodata"));
- break;
- }
-
- // remove "please wait" option
- selectBox.options[0] = null;
- }
-
- function saveSettings(selectBox)
- {
- var idx;
- var newFeedUrl;
- var newFeedTxt;
- var xmlPersonal;
- var defaultFeed;
-
- idx = selectBox.selectedIndex;
- newFeedUrl = selectBox[idx].value;
- newFeedTxt = selectBox[idx].text;
-
- xmlPersonal = loadPersonalSettings();
- defaultFeed = getSubNode(getSettingsNode(xmlPersonal), "defaultFeed");
- getSubNode(defaultFeed, "link").text = newFeedUrl;
- getSubNode(defaultFeed, "title").text = newFeedTxt;
- getSubNode(defaultFeed, "reload").text = "1";
- savePersonalSettings(xmlPersonal);
- }
-
- function reloadRSSFeed()
- {
- var rssContent;
- var selectBox;
- var rssOffline;
-
- rssContent = document.getElementById("rsscontent");
- rssOffline = document.getElementById("rssoffline");
- selectBox = document.getElementById("rssfeeds");
-
- saveSettings(selectBox);
- // load selected feed
- loadRSSFeed(rssContent, rssOffline, selectBox);
- }
-
- function InitializePage()
- {
- var WPTools;
- var rssContent;
- var selectBox;
- var rssOffline;
-
- // try
- // {
- // WPTools = new ActiveXObject("BDNWelcomePage.ClientTools");
- // clientAppDataFolder = WPTools.AppDataFolder;
- // } catch (e) {
- // clientAppDataFolder = appPath;
- // }
-
- clientAppDataFolder = external.Application.AppDataFolder;
-
- rssContent = document.getElementById("rsscontent");
- rssOffline = document.getElementById("rssoffline");
- selectBox = document.getElementById("rssfeeds");
-
- RenderProjectsModule();
- loadLanguageStrings();
- if(menuBar)
- loadLocalContent('menuBar');
- if(rssContent)
- loadRSSFeed(rssContent, rssOffline, selectBox);
- }
-